﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HMS_Hospital_Team2._6.BL;
using HMS_Hospital_Team2._6.DA;
using HMS_Hospital_Team2._6.DO;
using System.Collections;
using DevExpress.Utils;


namespace HMS_Hospital_Team2._6.GUI
{
    public partial class UcLapHoaDonThuTien : UserControl
    {
        string stendangnhap = "";
        string smk = "";
        public string smapb = "";
        string sMahoadon = "";
        string smaban = "";
        string sMaLoaiDV = "";
        string sMaDichVu = "";
        ArrayList arrLoaiDV = new ArrayList();
        public UcLapHoaDonThuTien(string sTenDN, string sMatKhau, string sMapb, string sMaban)
        {
            stendangnhap = sTenDN;
            smk = sMatKhau;
            smapb = sMapb;
            smaban = sMaban;
            InitializeComponent();
           
        }
        HMSHospitalEntities context = new HMSHospitalEntities();
        HoaDonBL thutien = new HoaDonBL();
        public DataTable data = new DataTable();
        
        // Load dữ liệu lên gridview Danh sách hóa đơn
        private void UcLapHoaDonThuTien_Load(object sender, EventArgs e)
        {
            cmbLoaiDV_LapHoaDon.DataSource = thutien.LoadthongtinNhomDV_BL();
            cmbLoaiDV_LapHoaDon.DisplayMember = "TenNhomDV";
            cmbLoaiDV_LapHoaDon.ValueMember = "MaNhomDV";

            cmbLoaiDV_LapHoaDon.SelectedItem = null;
            // Load dữ liệu lên combobox dịch vụ
            data = new DataTable();

            data.Columns.Add("MaDichVu", typeof(string));
            data.Columns.Add("TenDichVu", typeof(string));
            data.Columns.Add("GiaDichVu", typeof(string));
            data.Columns.Add("MaNhomDV", typeof(string));


            txtTongTien_LapHoaDon.Text = "0";
            txtTienNhan_LapHoaDon.Text = "0";
            txtTienThua_LapHoaDon.Text = "0";
        }

        // Load dữ liệu lên combobox Loại dịch vụ
        private void cmbLoaiDV_LapHoaDon_SelectionChangeCommitted(object sender, EventArgs e)
        {
            sMaLoaiDV = cmbLoaiDV_LapHoaDon.SelectedValue.ToString();
            cmbDichvu_Laphoadon.DataSource = thutien.LoadthongtinDV_BL(sMaLoaiDV);
            cmbDichvu_Laphoadon.DisplayMember = "TenDichVu";
            cmbDichvu_Laphoadon.ValueMember = "MaDichVu";
        }


        // Xu ly khi NV nhap ma benh nhan va nhan Enter
        private void txtMaBN_LapHoaDon_KeyUp(object sender, KeyEventArgs e)
        {

            if (e.KeyData == Keys.Enter)
            {
                string sMaBenhNhan = txtMaBN_LapHoaDon.Text;
                if (BL.BenhNhanBL.Checkdatabase_BL(sMaBenhNhan) == true)
                {
                    List<BenhNhanDO> Thongtin = BL.BenhNhanBL.LoadThongTinBN_BL(sMaBenhNhan);

                    txtTenBN_LapHoaDon.Text = Thongtin[0].HoBenhNhan + " " + Thongtin[0].TenBenhNhan;
                    txtTuoi_LapHoaDon.Text = (DateTime.Now.Year - Thongtin[0].NamSinh).ToString();
                    if (Thongtin[0].GioiTinh == true)
                        cmbGioiTinh_Laphoadon.SelectedIndex = 0;//0 la nam
                    else
                        cmbGioiTinh_Laphoadon.SelectedIndex = 1;//1 la nu

                }  
                else
                {
                    MessageBox.Show("Mã bệnh nhân không có trong hệ thống, vui lòng nhập lại.");
                }
            }
        }

        private void btnThem_Laphoadon_Click(object sender, EventArgs e)
        {
            if (cmbDichvu_Laphoadon.SelectedItem != null)
            {
                sMaDichVu = cmbDichvu_Laphoadon.SelectedValue.ToString();//Lấy mã dịch vụ trọn trên combobox
                bool check = true;//bien kiem tra dich vu do da co trong gridview
                for (int i = 0; i < grdThontinDV_lapHD.RowCount; i++)
                {
                    //Lấy mã dịch vụ trọn trên gridview
                    string smaDV = grdThontinDV_lapHD.GetRowCellValue(i, grdThontinDV_lapHD.Columns[1]).ToString();
                    if (sMaDichVu == smaDV)//so sánh 2 mã dịch vụ với nhau
                    {
                        check = false;//đánh dấu trùng
                        break;
                    }
                    else
                    {
                        check = true;//đánh dấu không trùng.
                    }
                }
                if (check == true)//cho phép thêm
                {
                    foreach (DataRow row in thutien.ThemDichVu_BL(sMaDichVu).Rows)
                    {
                        DataRow t = data.NewRow();
                        t["MaDichVu"] = row["MaDichVu"];
                        t["TenDichVu"] = row["TenDichVu"];
                        t["GiaDichVu"] = row["GiaDichVu"];
                        t["MaNhomDV"] = row["MaNhomDV"];
                        data.Rows.Add(t);
                    };
                }
                else//thong báo khi đã có dịch vụ trên gridview
                {
                    MessageBox.Show("Dịch vụ này đã có trong hóa đơn, xin vui lòng chọn dịch vụ khác.", "Thông báo", MessageBoxButtons.OK);
                }
                //Load thong tin dich vu vua them vao gridview
               
                grdThongtindv_LapHoaDon.DataSource = data;

                //Lay gia tong tien cua hoa don.
                txtTongTien_LapHoaDon.Text = grdclThanhTien.SummaryText.Substring(12);
                grdclDonGia.DisplayFormat.FormatType = FormatType.Numeric;
                grdclDonGia.DisplayFormat.FormatString = "{0:0,0} VND";
                grdclThanhTien.DisplayFormat.FormatType = FormatType.Numeric;
                grdclThanhTien.DisplayFormat.FormatString = "{0:0,0} VND";
            }
            else
            {
                MessageBox.Show("Vui lòng chọn dịch vụ cần thêm", "Thông báo", MessageBoxButtons.OK);
            }
        }

        // Xu ly khi NV muon xoa 1 hang tren gridview
        private void grdThongtindv_LapHoaDon_ProcessGridKey(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                grdThontinDV_lapHD.DeleteRow(grdThontinDV_lapHD.FocusedRowHandle);
                e.Handled = true;
                txtTongTien_LapHoaDon.Text = grdclThanhTien.SummaryText.Substring(12);

            }
        }

        //Xu ly khi NV chon Them DV
        void ThemDichVu(string sMahoadon,string smandv)
        {
            for (int i = 0; i < grdThontinDV_lapHD.RowCount; i++)
            {
                string sMaNhomDV = grdThontinDV_lapHD.GetRowCellValue(i, grdThontinDV_lapHD.Columns[0]).ToString();
                if (sMaNhomDV == smandv)
                {
                    string smaDV = grdThontinDV_lapHD.GetRowCellValue(i, grdThontinDV_lapHD.Columns[1]).ToString();
                    string smaHD = sMahoadon;
                    string stenDV = grdThontinDV_lapHD.GetRowCellValue(i, grdThontinDV_lapHD.Columns[2]).ToString();
                    Decimal igiaDV = Decimal.Parse(grdThontinDV_lapHD.GetRowCellValue(i, grdThontinDV_lapHD.Columns[3]).ToString());
                    bool blchontra = true;

                    BL.ChiTietHoaDonBL.LaphoadonDV_BL(smaDV, smaHD, stenDV, igiaDV, blchontra);
                }
            }
        }
        DateTime daNgayTao;
        string smanguoitao = "";
        Form1 frm;
        ChuyenTien chuyentien = new ChuyenTien();
        //Ham lap hoa don cho ng NV nhap lieu
        void LapHoaDon()
        {

            //Lay Ma Nhom Dich Vu co trong gridview
            for (int i = 0; i < grdThontinDV_lapHD.RowCount; i++)
            {
                string sMaNDV = grdThontinDV_lapHD.GetRowCellValue(i, grdThontinDV_lapHD.Columns[0]).ToString();
                if (arrLoaiDV.Contains(sMaNDV))
                {

                }
                else
                {
                    arrLoaiDV.Add(sMaNDV);
                }
            }


            List<phanquyen> thongtintk = BL.NhanVienBL.Loadthongtindangnhap_BL(stendangnhap, smk);

            int icount = arrLoaiDV.Count;
            string smaNhomDV = "";
            for (int i = 0; i < icount; i++)
            {
                smaNhomDV = arrLoaiDV[i].ToString();
                Decimal iTongTien = 0;
                for (int j = 0; j < grdThontinDV_lapHD.RowCount; j++)
                {
                    string sMaNDV = grdThontinDV_lapHD.GetRowCellValue(j, grdThontinDV_lapHD.Columns[0]).ToString();
                    if (sMaNDV.Equals(smaNhomDV))
                    {
                        iTongTien = iTongTien + Decimal.Parse(grdThontinDV_lapHD.GetRowCellValue(j, grdThontinDV_lapHD.Columns[3]).ToString());
                    }
                }


                string smaBN = txtMaBN_LapHoaDon.Text;
                smanguoitao = thongtintk[0].MaNhanVien;
                string smanguoithu = null;
                string smaPB = smapb;
                string sMaBan = smaban;
                daNgayTao = DateTime.Now;
                Decimal iTongPhiDV = iTongTien;
                string stongtienbangchu = chuyentien.So_chu(Double.Parse(iTongPhiDV.ToString()));
                bool blgioitinh = true;
                if (cmbGioiTinh_Laphoadon.SelectedIndex == 0)
                {
                    blgioitinh = true;//la nam
                }
                else
                    blgioitinh = false;//la nu
                int ituoi = Int32.Parse(txtTuoi_LapHoaDon.Text);
                bool bltrangthai = false;
                try
                {
                    context.SP_TangMa(smaNhomDV, smaBN, smanguoitao, smanguoithu, smaPB, sMaBan, daNgayTao, iTongPhiDV,stongtienbangchu,blgioitinh, ituoi, bltrangthai);

                    
                    //Ham luu thong tin vao bien lai
                    frm = new Form1(txtMaBN_LapHoaDon.Text);
                    
                }
                catch (Exception)
                {

                    throw;
                }

                using (HMSHospitalEntities thongtindv = new HMSHospitalEntities())
                {
                    var thoigian = (from tg in thongtindv.HoaDons
                                    select tg);

                    foreach (var row in thoigian)
                    {
                        if (row.NgayTao.Day == daNgayTao.Day && row.NgayTao.Month == daNgayTao.Month && row.NgayTao.Year == daNgayTao.Year
                                    && row.NgayTao.Hour == daNgayTao.Hour && row.NgayTao.Second == daNgayTao.Second && row.NgayTao.Minute == daNgayTao.Minute && row.MaNguoiTao == smanguoitao)
                        {
                            sMahoadon = row.MaHoaDon;
                        }
                    }
                }
                //Luu thong tin va bảng ChiTietHoaDon
                ThemDichVu(sMahoadon,smaNhomDV);
                
            }
          
        }


        
        //Xu ly khi ng NV click vao nut Inbienlai
        private void btnInbienlai_LapHoaDon_Click(object sender, EventArgs e)
        {
            //Luu thong tin vào bang HoaDon
            if (grdThontinDV_lapHD.RowCount == 0)
            {
                MessageBox.Show("Vui lòng nhập đầy đủ thông tin và bảng thông tin dịch vụ trước khi in");
            }
            else
            {
                LapHoaDon();
                frm.Show();
                //Load danh sách hóa đơn vừa tạo  lên gridview
                grdDanhsachHD.DataSource = thutien.LoadHDchuathu_BL(smaban);



                //Làm mới 
                txtMaBN_LapHoaDon.Text = null;
                txtTenBN_LapHoaDon.Text = null;
                txtTienNhan_LapHoaDon.Text = null;
                txtTienThua_LapHoaDon.Text = null;
                txtTongTien_LapHoaDon.Text = null;
                txtTuoi_LapHoaDon.Text = null;
                cmbLoaiDV_LapHoaDon.SelectedItem = null;
                cmbDichvu_Laphoadon.SelectedItem = null;
                cmbGioiTinh_Laphoadon.SelectedItem = null;
                cmbLoaiDV_LapHoaDon.Enabled = true;
                //xoa so dong trong gridview
                for (int i = 0; i < grdThontinDV_lapHD.RowCount; )
                {
                    grdThontinDV_lapHD.DeleteRow(i);
                }
            }

        }
        int i = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            i++;
            if (i == 30)
            {
                grdDanhsachHD.DataSource = thutien.LoadHDchuathu_BL(smaban);
                i = 0;
            }
        }
    }
}
